# -*- coding:utf-8 -*-

# 实现登录注册功能

from . import api
from flask import request,current_app,jsonify,session
from iHome import redis_store,db
from iHome.models import User
from iHome.utils.response_code import RET
from iHome.utils.common import login_required


@api.route("/session")
def check_user_login():
    '''
    判断用户是否登录,如果登录,返回登录的信息:用户名,用户id
    :return:
    '''
    user_id = session.get("user_id")
    name = session.get("name")
    return jsonify(errno=RET.OK,errmsg="OK",data={"user_id":user_id,"name":name})


@api.route("/session",methods="DELETE")
@login_required
def logout():
    # 清除用户登录信息
    session.pop("name",None)
    session.pop("mobile",None)
    session.pop("user_id",None)
    return jsonify(errno=RET.OK,errmsg="OK")


@api.route("/session",methods=["POST"])
def login():
    # 1.获取参数
    data_dict = request.json
    mobile = data_dict.get('mobile')
    password = data_dict.get('password')

    if not all([mobile,password]):
        return jsonify(errno=RET.PARAMERR,errmsg="参数不完整")

    # 2.找到对应手机号的用户
    try:
        user = User.query.filter_by(mobile=mobile).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg='查询数据错误')

    if not user:
        return jsonify(errno=RET.DATAERR,errmsg="用户不存在")

    # 3.校验密码
    if not user.check_password(password):
        return jsonify(errno=RET.PWDERR,errmsg="用户名或者密码错误")

    # 4.保存登录状态返回结果
    session['name'] = user.name
    session['mobule'] = user.mobile
    session['user_id'] = user.id

    # 5.返回结果
    return jsonify(errno=RET.OK,errmsg='登录成功')

@api.route('/users',methods=['POST'])
def register():
    '''
    1.获取参数并判断是否有值
    2.取到本地的验证码
    3.将本地验证码和传入的短信验证码进行对比，如果一样
    4.创建用户模型，并设置数据，并添加到数据库
    5.返回结果
    '''
    # 1.获取参数并判断是否有值
    data_dict = request.json
    mobile = data_dict.get('mobile')
    phonecode = data_dict.get('phonecode')
    password = data_dict.get('password')

    if not all([mobile,phonecode,password]):
        return jsonify(errno=RET.PARAMERR,errmsg='参数不全')

    # 2.取到本地的验证码
    try:
        sms_code = redis_store.get('SMS_'+ mobile)
        redis_store.delete("SMS_" + mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg='本地短信验证码获取失败')
    if not sms_code:
        return jsonify(errno=RET.DBERR,errmsg='短信验证码过期')

    # 3.将本地验证码和传入的短信验证码进行对比，如果一样
    if phonecode != sms_code:
        return jsonify(errno=RET.DATAERR,errmsg='短信验证码错误')

    # 4.创建用户模型，并设置数据，并添加到数据库
    user = User()
    # 设置数据
    user.name = mobile
    user.mobile = mobile
    user.password = password
    # 保存用户数据
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="保存数据失败")

    # 保存登录状态
    session['name'] = mobile
    session['mobule'] = mobile
    session['user_id'] = user.id

    # 5.返回结果
    return jsonify(errno=RET.OK,errmsg="注册成功")






























